package com.sicheng.lc.周赛.分类.贪心.区间问题;

import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;

/**
 * @author zsc
 * @version 1.0
 * @date 2022/8/1 22:10
 */
@SuppressWarnings("")
public class 区间覆盖 {
    //https://www.acwing.com/problem/content/description/909/

    /**
     * 给定 N 个闭区间 [ai,bi] 以及一个线段区间 [s,t]，请你选择尽量少的区间，将指定线段区间完全覆盖。
     * <p>
     * 输出最少区间数，如果无法完全覆盖则输出 −1。
     * <p>
     * 输入格式
     * 第一行包含两个整数 s 和 t，表示给定线段区间的两个端点。
     * <p>
     * 第二行包含整数 N，表示给定区间数。
     * <p>
     * 接下来 N 行，每行包含两个整数 ai,bi，表示一个区间的两个端点。
     * <p>
     * 输出格式
     * 输出一个整数，表示所需最少区间数。
     * <p>
     * 如果无解，则输出 −1。
     * <p>
     * 数据范围
     * 1≤N≤10e5,
     * −10e9≤ai≤bi≤10e9,
     * −10e9≤s≤t≤10e9
     * 输入样例：
     * 1 5
     * 3
     * -1 3
     * 2 4
     * 3 5
     * 输出样例：
     * 2
     */

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int start = in.nextInt(), end = in.nextInt();
        int n = in.nextInt();
        int[][] range = new int[n][2];
        for (int i = 0; i < n; i++) {
            range[i][0] = in.nextInt();
            range[i][1] = in.nextInt();
        }

        boolean ok = false;
        int res = 0;
        Arrays.sort(range, Comparator.comparingInt(a -> a[0]));
        for (int i = 0; i < n; i++) {
            int r = (int) -2e9;
            int j = i;

            while (j < n && range[j][0] <= start) {
                r = Math.max(r, range[j][1]);
                j++;
            }

            if (r < start) {
                res = -1;
                break;
            }
            res++;

            if (r >= end) {
                ok = true;
                break;
            }
            i = j - 1;
            start = r;
        }


        if (!ok)
            res = -1;
        System.out.println(res);

    }
}
